package unmsm.eapisw.taller.srh_persistencia.dao.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import unmsm.eapisw.taller.srh_persistencia.dao.IUsuarioDAO;
import unmsm.eapisw.taller.srh_persistencia.modelo.Administrador;
import unmsm.eapisw.taller.srh_persistencia.modelo.Permisos;
import unmsm.eapisw.taller.srh_persistencia.modelo.Usuario;

public class UsuarioDAO implements IUsuarioDAO {

	private SessionFactory sessionFactory;

	/**
	 * Get Hibernate Session Factory
	 * 
	 * @return SessionFactory - Hibernate Session Factory
	 */
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
	 * Set Hibernate Session Factory
	 * 
	 * @param SessionFactory
	 *            - Hibernate Session Factory
	 */
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public boolean addUsuario(Usuario ho) {
		getSessionFactory().getCurrentSession().save(ho);
		return true;
	}

	public boolean updateUsuario(Usuario ho) {
		getSessionFactory().getCurrentSession().update(ho);
		return true;
	}

	public void deleteUsuario(Usuario ho) {
		getSessionFactory().getCurrentSession().delete(ho);

	}

	public Usuario getUsuarioById(String id) {
		
		List list = getSessionFactory().getCurrentSession().createQuery("from Usuario where usuario=?").setParameter(0, id).list();
		if(list==null || list.isEmpty()){
			
			return null;
		}

		return (Usuario) list.get(0);
	}

	public List<Usuario> getUsuario() {
        List list = getSessionFactory().getCurrentSession().createQuery("from Usuario").list();
        return list;
	}

	public Set<Permisos> getPermisosByIdUser(int idUser) {
		Query query = getSessionFactory().getCurrentSession().createQuery("select distinct u from Usuario  u inner join  u.permisos where u.id=?").setParameter(0, idUser);
		List<Usuario> list = query.list();
		Set<Permisos> psos = list.get(0).getPermisos();
		Hibernate.initialize(psos);
		
//		if(psos == null || psos.isEmpty()){
//			System.out.println("Permisos vacios");
//		}else{
//			Permisos p=null;
//			System.out.println("Contiene permisos");
//			Iterator it=psos.iterator();
//			
//			while(it.hasNext()){
//				p = (Permisos)it.next();
//				System.out.println("+++++ "+p.getMenunombre());
//			}
//			
//		}

		
		return psos;
	}

}
